package com.xlh.support.attendance.service;

import com.xlh.dto.conclude.BusiFullMarkDTO;
import com.xlh.pojo.support.Statistics;
import com.xlh.support.attendance.po.AttendanceListQueryPO;
import com.xlh.support.attendance.po.AttendanceRecordPO;
import com.xlh.support.attendance.po.SettingMarkPO;
import com.xlh.support.attendance.vo.AttendanceResultVO;
import com.xlh.support.attendance.vo.AttendanceSettingMarkVO;
import com.xlh.support.attendance.vo.AttendanceVO;

import java.util.List;

/**
 * @author cheer
 */
public interface AttendanceService {

    /**
     * 查询考勤名单
     *
     * @param attendanceListQueryPO 考勤名单查询参数
     * @param isStatisticPage       是否为统计页面
     * @return 考勤名单
     */
    List<AttendanceVO> listAttendanceStudents(AttendanceListQueryPO attendanceListQueryPO, Boolean isStatisticPage);

    /**
     * 记录考勤
     *
     * @param attendanceRecordPO 考勤记录参数
     */
    BusiFullMarkDTO recordAbsent(AttendanceRecordPO attendanceRecordPO);

    /**
     * 开始签到
     *
     * @param userId   用户Id
     * @param classIds 班级Id集合
     */
    void beginRecord(Long userId, List<Long> classIds);

    /**
     * 签到
     *
     * @param userId 用户Id
     */
    void record(Long userId);

    /**
     * 关闭签到
     *
     * @param userId   用户Id
     * @param courseId 课程Id
     * @param classIds 班级Id集合
     * @return 签到结果
     */
    AttendanceResultVO endRecord(Long userId, Long courseId, List<Long> classIds);

    /**
     * 查询当前正在签到班级
     *
     * @param userId 用户Id
     * @return 班级Id集合
     */
    List<Long> currentAttendance(Long userId);

    /**
     * 增加一次未签到
     *
     * @param courseId 课程Id
     * @param classId  班级Id
     * @param userId   用户Id
     */
    void addAbsent(Long courseId, Long classId, Long userId);

    /**
     * 是否有正在进行的签到
     *
     * @param userId 用户Id
     * @return 如果有返回ture，否则返回false
     */
    Boolean isAttendanceRunning(Long userId);


    /**
     * 接口4：考勤（查询未删除）
     * 目的：查询每个学生的考勤情况
     * 参数：Long courseId 、 Long classId、List<Long> userIds
     * 返回值：List<考勤对象> 必须包含：旷课数、courseId、classId、userId
     * @return
     */
    List<Statistics> findAttendanceByUserIds(Long courseId, Long classId, List<Long> userIds);


    /**
     * 考勤设置满分项 以班级为单位
     * @param settingMarkPO
     */
    void settingFullMark(SettingMarkPO settingMarkPO);


    /**
     * 获取满分项设置
     * @param classId
     * @param courseId
     * @return
     */
    AttendanceSettingMarkVO getFullMarkSetting(Long classId, Long courseId);



}
